分类
联系方式
  1. 新浪微博
  2. E-mail

Blog Bug 003:文章内链跳转失败

问题描述

在文章页内,引用的内链文章,url 打开失败。

举例:BackTrader CrossOver 交叉指标 文章内,有一个内链《BackTrader SMA 金叉策略》,打开失败。

分析

该内链指向路径为:https://maxieewong.com/BackTrader_SMA_%E9%87%91%E5%8F%89%E7%AD%96%E7%95%A5.html

可以看到空格以下划线代替,而实际生成的页面,空格还是空格。

下划线的规则是哪里来的?

这是 MediaWiki 的规则,他在内部引用的时候,如果标题中包含空格,会自动转为下划线。在我的页面捕获逻辑中,捕获了这部分 HTML,引入了该规则。但是我在实际输出的页面中,还是按照保留空格的方式进行输出,这里没能对上。

尴尬的是线上都是按保留空格的方式,如果改为下划线方式,会导致已有的搜索引擎索引失效。

因此我选择的方案,是在 HTML 页面捕获逻辑中,按照保留空格的规则生成内链。

又尴尬了,在替换链接 href 的时候,我根据一个下划线的 title,无法判断它对应的是哪个实际网页(有页面实体 PageInfo)。

有一种低成本解决方案,将所有下划线都转为空格,带来的代价就是以后的页面中都不允许包含下划线。(这个没有问题,因为 MediaWiki 文章标题本身页有这一限制,即标题不允许出现下划线,如果我们在 MediaWiki 标题中写入了下划线,他会自动将其转为空格)基于 MediaWiki 的限制,这种低成本方案逻辑自洽了,可行。

总结

通过上述低成本方案修复完成。

同时,需记住标题命名限制:不能包含下划线